import templateGallery.mvcgallery.*
import templateGallery.mvc.*
import templateGallery.I.*
import flash.display.BitmapData
import templateGallery.util.Observable
import mx.transitions.Tween
import mx.transitions.easing.*

class templateGallery.mvcgallery.ImageView extends AbstractView {
	var __background:MovieClip
	var __container:MovieClip
	var __container2:MovieClip
	var __width:Number
	var __height:Number
	var __bmp:BitmapData
	////tweeny
	var tweenIn:Tween
	var tweenW:Tween
	var tweenH:Tween
	var tweenOut:Tween
	////////mouse effect
	var __maxWidth:Number=5000
	var __maxHeight:Number=5000
	var __mask:MovieClip
	var __xmouse
	var __ymouse
	///////////////
	var __spaceDown:Number=0
	var __space:Number=30
	var __hitTest:Boolean=false
	var __loader:MovieClipLoader
	var __visibility:Boolean=false	
	
/////////////////////////////////////////////////////////	
	
function ImageView(){
	this.__maxWidth=Configuration.MAX_WIDTH
	this.__maxHeight=Configuration.MAX_HEIGHT
	
	this.useHandCursor=false
	
	
	this.__background._width=0
	 this.__background._height=0
}

/////////////////////////////////////////////////////////	

public function defaultController (model:Observable):Controller {
  return new ImageController(model)
 }
 
 ////////////////////////////////////////
 
 function onLoad(){
	 this.__background._width=0
	 this.__background._height=0
	Stage.addListener(this)	 
	
 }
 
 ////////////////////////////////////////////
 
 function onResize(){
  this._x=Stage.width/2
  this._y=Stage.height/2
   

 if(this.__visibility==true){
var m:GalleryModel=GalleryModel(this.getModel())
m.dispatchExitStart()
  }
	 
 }
 
 ///////////////////////////////////
 
 function onLoadStart(){
	 	var m:GalleryModel=GalleryModel(this.getModel())
	 m.onLoadImageStart()
 }
 
/////////////////////////////////////////////////////////	

function onLoadInit(target){
			 if(Configuration.AUTO_SIZE_BIG_IMAGE=="true"){
  this.__maxWidth=Stage.width-80
  this.__maxHeight=Stage.height-200
  }
  
  /////////////////////
	   	
		this.__width=Math.min(target._width,this.__maxWidth)
		this.__height=Math.min(target._height,this.__maxHeight)
		////////////////

		
		var m:GalleryModel=GalleryModel(this.getModel())
		m.dispatchLoadInitImage()
				
		var m:GalleryModel=GalleryModel(this.getModel())
		m.introStart()
}

//////////////////////////////////////////

function onLoadProgress(target,l,t){
	var m:GalleryModel=GalleryModel(this.getModel())
	var loader_={}
	loader_.target=target
	loader_.l=l
	loader_.t=t
	m.dispatchLoadProgress(loader_)
}

///////////////////////////////////////////////////////////////////////////

	function onChangedIndex(){
		var m:GalleryModel=GalleryModel(this.getModel())
				
		this.__background._visible=true
		if(!this.__container){
		this.shov()	
		firstIntro()
		}
		else{
		var model:GalleryModel=GalleryModel(this.getModel())
		model.exitStart()
		}
	}

////////////////////////////////////////////////////

function onLoadImage(){
	this.useHandCursor=false
	this.enabled=false	
	
var m:GalleryModel=GalleryModel(this.getModel())
var url=m.getAttributes().picbig

if(!this.__container){
		this.__loader=new MovieClipLoader()
		this.__loader.addListener(this)
		this.__container=this.createEmptyMovieClip("container",1)	
		this.__container2=this.__container.createEmptyMovieClip("setno",1)
}

this.__loader.loadClip(url,this.__container2)

}

//////////////////////////////////////////////////

function getWidth(){
	return this.__background._width
}

///////////////////////

function getHeight(){
	return this.__background._height
}
	
///////////////////////////////////////////////////////////////////////////

function firstIntro(){   
		var model:GalleryModel=GalleryModel(this.getModel())
		__background._width=300
		__background._height=300
		
		var th=this
		__background._alpha=0
		model.imageResize()
				
		this.__background.tween('_alpha',100,1,'easeOutCubic',.1,{scope:model,func:model.load})
		
}

//////////////////////////////////////////////////////////////////////

function onHideImage(){
this.useHandCursor=false
	this.enabled=false	
	
this.hide()	
}
	
///////////////////////////////////////////////////////////////////////////

function shov(){
	
	this.__visibility=true
}

///////////////////////////////////////////////////////////////////////////

function hide(){
	this.__visibility=false
	
	this.__container.removeMovieClip()
	delete this.__container
	
	this.__background.stopTween()
	this.__background.tween('_width',0,.7,'easeInOutCubic',0,{scope:this,func:this.endHide})
	this.__background.tween('_height',0,.7,'easeInOutCubic',0)
	this.__mask._visible=false
}

//////////////////////////////////////////////////

function endHide(){
	this.__background._visible=false
	
}

////////////////////event firstIntro and Exit

function onIntroStart(){
	
	
	stop_tween()
	/////////////////////////////
	var m:GalleryModel=GalleryModel(this.getModel())  //model gallery
	////////////change size background
	tweenW=new Tween(__background,'_width',Strong.easeInOut,__background._width,this.__width+this.__space*2,.7,1)
	tweenW.onMotionChanged=Delegate2.create(m,m.imageResize)
    tweenW.onMotionFinished=Delegate2.create(this,this.intro)
	tweenH=new Tween(__background,'_height',Strong.easeInOut,__background._height,this.__height+this.__space*2+this.__spaceDown*2,.7,1)
	var tweenY=new Tween(__background,'_y',Strong.easeInOut,__background._y,this.__spaceDown,.7,1)
		
	this.__container._x=-this.__width/2
	this.__container._y=-this.__height/2
	this.__container._alpha=0
	
	
}

////////////////////////////////////////////////////////////////////////////

function stop_tween(){
	tweenW.stop()
	tweenH.stop()
	this.tweenIn.stop()
	tweenOut.stop()
}

////////////////////////////////////////////////////////////////////////////

function intro(){
	this.iniTween()
	stop_tween()
	var m:GalleryModel=GalleryModel(this.getModel()) 
	this.tweenIn=new Tween(__container,'_alpha',Strong.easeInOut,0,100,1,1)
    this.tweenIn.onMotionFinished=Delegate2.create(m,m.introEnd)
}

////////////////////////////////////////////////////////////////////////////

function onIntroEnd(){
	var m:GalleryModel=GalleryModel(this.getModel())
	var c:ImageController=ImageController(this.getController())
	c.onIntroEnd()
	
	 this.hitArea=this.__container2
	 this.enabled=true
	 //////////////////////jesli jest dany link
	 if(m.getAttributes().url.length){
	  this.useHandCursor=true
	 }else{
		this.useHandCursor=false 		 
	 }
}

////////////////////////////////////////////////////////////////////////////

function onExitStart(){
	this.useHandCursor=false
	this.enabled=false
		
		
	stop_tween()
	var m:GalleryModel=GalleryModel(this.getModel())
	tweenOut=new Tween(__container,'_alpha',Strong.easeInOut,__container._alpha,0,1,1)
	tweenOut.onMotionFinished=Delegate2.create(m,m.exitEnd)
}

////////////////////////////////////////////////////////////////////////////

function onExitEnd(){
	this.__container.frame.removeMovieClip()
	var c:ImageController=ImageController(this.getController())
	c.onExitEnd()
}	

/////////////////////////////////////////////////////////////////////////////////















/////////////////////////////////////////////////////////////////////////////MOUSE EVENT

private function iniTween(){
this.createMask()
}

////////////////////////////////////////////////////////////

private function onRollOver(){
	watchMouse()
	
}

///////////////////////////////////////

private function onRollOut(){
	
}

/////////////////////////////////

function onMouseMove(){
	var m:GalleryModel=GalleryModel(this.getModel())
	
	if(hitTestImage()&&this.__hitTest==false){
	this.__hitTest=true
	m.dispatch_onRollOverImage()
	}else if(!hitTestImage()&&this.__hitTest==true) {
	this.__hitTest=false
	m.dispatch_onRollOutImage()		
	}
}

///////////////////////////////////////////////////////////////////////////

function onPress(){
	var m:GalleryModel=GalleryModel(this.getModel())
	var url=m.getAttributes().url
	var target=m.getAttributes().target
	if(target==undefined){
		target="_blank"
	}
	
	if(url.length){
	  getURL(url,target)
	 }
}

///////////////////////////////////////////////////////////////////////////

private function resetTween(){
	delete this.onEnterFrame
	this.__container2._x=0
	this.__container2._y=0
}

///////////////////////////////////////////////////////////////////////////

private function createMask(){
	this.resetTween()
	this.__mask=this.createEmptyMovieClip("mc_mask",3214)
	this.__mask._x=this.__container._x
	this.__mask._y=this.__container._y
	Drawing.rectangle(this.__mask,0,0,this.__width,this.__height,["0xFF0000",100])
	this.__container.setMask(this.__mask)
	onRollOver()
}

///////////////////////////////////////////////////////////////////////////

private function hitTestImage(){
	return this.__container2.hitTest(_root._xmouse,_root._ymouse,true)
}

//////////////////////////

private function watchMouse(){
	this.onEnterFrame=function(){
		
	if(hitTestImage()){	
	__xmouse=Math.max(0,Math.min(  this.__mask._xmouse/this.__width  ,1))
	__ymouse=Math.max(0,Math.min(  this.__mask._ymouse/this.__height  ,1))
	}
	
	var encoreX=this.__container2._width-this.__width
	var encoreY=this.__container2._height-this.__height
	var valueX=-__xmouse*encoreX
	var valueY=-__ymouse*encoreY
	
	this.__container2._x+=(valueX-this.__container2._x)/6
	this.__container2._y+=(valueY-this.__container2._y)/6
	
	var oddsX=this.__container2._x-this.__container2.x
	var oddsY=this.__container2._y-this.__container2.y
	
	if(oddsX==0&&oddsY==0&&!hitTestImage()){
		delete this.onEnterFrame
		
	}
	this.__container2.x=this.__container2._x
	this.__container2.y=this.__container2._y
}}

///////////////////////////////////////////////////////////////////////////


	
}

